IF(MSGPACK_BOOST)
    LIST(APPEND exec_PROGRAMS msgpack_variant_capitalize.cpp msgpack_variant_mapbased.cpp)
ENDIF()

FOREACH(source_file ${exec_PROGRAMS})
    GET_FILENAME_COMPONENT(source_file_we ${source_file} NAME_WE)
    ADD_EXECUTABLE(${source_file_we} ${source_file})
    IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
        SET_PROPERTY(
            TARGET ${source_file_we}
            APPEND_STRING
            PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3"
        )
    ENDIF()

    IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
        SET_PROPERTY(
            TARGET ${source_file_we}
            APPEND_STRING
            PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags"
        )
    ENDIF()

    IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
        IF(
            (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}
             )
            OR
                (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL
                 ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}
                 )
        )
            SET_PROPERTY(
                TARGET ${source_file_we}
                APPEND_STRING
                PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags"
            )
        ENDIF()
    ENDIF()

    IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
        IF(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
            STRING(
                REGEX
                REPLACE
                    "/W[0-4]"
                    "/W3 /WX"
                    CMAKE_CXX_FLAGS
                    "${CMAKE_CXX_FLAGS}"
            )
        ELSE()
            SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
        ENDIF()
    ENDIF()
ENDFOREACH()
